<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 两个非重叠子数组的最大和 -->
    <script>
      var maxSumTwoNoOverlap = function (nums, firstLen, secondLen) {
        const n = nums.length
        const getSum = (first, second) => {
          let sum = 0
          // 遍历数组 长度上需要减去2个数组的长度
          for (let i = 0; i <= n - first - second; i++) {
            let sum1 = (sum2 = 0)
            // 前面数组的遍历 遍历从i到走完first的情况 计算总和
            for (let j = i; j < i + first; j++) {
              sum1 += nums[j]
            }
            // 后面数组的遍历 先计算第一次总和 从 i + first 到 此基础上到second的
            for (let j = i + first; j < i + first + second; j++) {
              sum2 += nums[j]
            }
            // 比较最大数
            sum = Math.max(sum, sum1 + sum2)
            // 开始滚动在后面数组的情况 依次得到每次的总和比较
            // 前面数组因为在外面一层就已经遍历全部情况了
            // 滑动窗口的后面 - j 滑动窗口的前面 - pre
            for (let j = i + first + second, pre = i + first; j < n; j++, pre++) {
              sum2 = sum2 - nums[pre] + nums[j]
              sum = Math.max(sum, sum1 + sum2)
            }
          }
          return sum
        }
        // 两种情况 第一个数组在前 和 第二个数组在前
        return Math.max(getSum(firstLen, secondLen), getSum(secondLen, firstLen))
      }
      console.log(maxSumTwoNoOverlap([0, 6, 5, 2, 2, 5, 1, 9, 4], 1, 2))
    </script>
  </body>
</html>
